perm filename MSSUB.OLD[NEW,LCS] blob sn#592319 filedate 1981-06-17 generic text, type T, neo UTF8
C*** MSSUB.F4 --- SUBROUTINES FROM MS.F4
C***  ESPOS, CENTXT, CONTXT,MORCEN, GETMS

	SUBROUTINE ESPOS(RLINE)
C FOR 'ED' AND 'ES' COMMANDS
C** CALL BOX, EXCH
	COMMON /JCHAR/IXX,ISEMI,IBLA,IG,JED,KED,REDIT,RITEM 
	COMMON R2,JA,CENTR,J2,RJQ(20),J3,J4 /ALF/I1,I2
	COMMON/A2Z/LAA,LBB,LCC,LDD,LEE,LFF,LGG,LHH,LII,LJJ,LKK,LEL,LMM
	1 ,LNN,LOH,LPP,LQQ,LRR,LSS,LTT,LUU,LVV,LWW,LXX,LYY,LZZ
	EQUIVALENCE (R4,RJQ(2)),(R3,RJQ(1))
	IF(I2.NE.LSS)GO TO 1490
	CALL EXCH(R2,R3)
	J3=R3
C 'ES' IS "EDIT, STAFF, POS., CODE"
C 'ED' IS "EDIT, POS., STAFF, CODE"
1490	CALL BOX(-1,R2)
	IF(J4.EQ.0)KED=-1
	RITEM=R4
C  FOR 'ED POS., STF., CODE#'   (STF > 7 = ALL STAVES)
	IF(J3.GT.7)KED=-2
	RLINE=R2
	R2=R3
	END

C  NEXT FOR CENTERING TEXT.  P10>1
	SUBROUTINE CENTXT(RD)
	COMMON /PTR/KWDS(1) /STF/RSTFAC(0/7),RSTJ2 /XRN/RN(1)
	COMMON R2,JA,CENTR,J2,RJQ(20)  /LIMIT/LIMIT,ITEM,L
	EQUIVALENCE (R10,RJQ(8)),(R3,RJQ(1))
	RB=0
	JX=KWDS(L+1)
1960	L=L+1
	K=KWDS(L)
	RB=RB+RN(K+9)
C  ADD SPACE NEEDED
	K=KWDS(L+1)
	IF(RN(K+1).NE.16.)GO TO 1970
	IF(RN(K).EQ.8.)GO TO 1960
C GO BACK IF MORE LETTERS TO COME
1970	R3=R10-(RB-3.4)*RD*RSTJ2/2.
C  +3.4 IS TO COMPENSATE FOR STARTING POS. BEING IN CENTER OF LET.
	R10=0
	IF(RN(JX).EQ.8)RN(JX+10)=0
	RN(JX+3)=R3
C THESE ARE NEEDED FOR ITEMS CENTERED DIRECTLY FROM 'WORDS'
	END

	SUBROUTINE CONTXT
C FOR TEXT CONTINUATION
	COMMON /PTR/KWDS(1) /STF/RSTFAC(0/7),RSTJ2 /XRN/RN(1)
	COMMON R2,JA,CENTR,J2,RJQ(20) /LIMIT/LIMIT,ITEM,L
	COMMON /RRJJ/RJJ2,RJJ(20),JJA
	EQUIVALENCE (R3,RJQ(1)),(R4,RJQ(2)),(R5,RJQ(3))
1980	K=KWDS(L)
	R3=AMOD(RN(K+5),100.)*RSTJ2*RN(K+9)+RN(K+3)
C  AMOD BECAUSE P5+100 IS USED FOR PARTS PROGRAM.
	R4=RN(K+4)
	R5=RN(K+5)
	R2=RN(K+2)
	J2=R2
	L=KWDS(L+1)
	DO 1990 JJA=3,5
1990	RN(L+JJA)=RJQ(JJA-2)
	RN(L+2)=R2
	END

	SUBROUTINE MORCEN(ICB)
	IMPLICIT INTEGER(A-Q,S-Z)
	REAL STFF,CENTR
	COMMON  /STF/RSTFAC(0/7),RSTJ2
	COMMON  /RRJJ/RJJ2,RJJ(20),JJA
	COMMON  /LIMIT/LIMIT,ITEM,L,I,IX,ITEMX,ILIM
	COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
	EQUIVALENCE (J3,JQ(1)),(J4,JQ(2)),(J5,JQ(3)),(R5,RJQ(3)),
	1 (R6,RJQ(4)),(R4,RJQ(2)),(R7,RJQ(5)),(R3,RJQ(1)),
	4 (R11,RJQ(9)),(R8,RJQ(6)),(RJ3,RJJ(1)),(R13,RJQ(11))

2010	RJ3=R3
	JJA=JA
	IF(R8.NE.0)GO TO 2020
	IF(JA.EQ.1)R8=999.
C  999=0 FOR STEM EXTENSIONS.
C  USES ONLY 10 PARAMETERS BEYOND JA, J2
2020	CALL MSSLUP
	IF(JA.NE.6)GO TO 2040
2030	CALL HOMER

2040	IF(R13.EQ.0)RETURN
	RD=R11
	IF(ICB.EQ.0)GO TO 2050
C *** ICB = CENTER-BIG  I.E. BIG RANGE FOR CENTERING -- 6 UNITS. (CAN VAR
	X=ICB+10
	IF(ICB.LT.-1)ICB=X
C CBV  NOW=-4, CHV AND CTV =-10
	IF(RD.EQ.0)R11=ICB
	IF(JA.NE.4)GO TO 2045
	IF(ICB.GE.0)GO TO 2050
	CALL DASHES(ITEM,R2,RJQ)
C SUBR. DASHES WILL CENTER DASH BETWEEN TO WORDS OR SYLLABLES. (TYPE 'CD')
	GO TO 2060
2045	IF(JA.NE.5.OR.ICB.GT.0)GO TO 2050
C *** CV = SET CURVE OF SLUR. (FOR USE AFTER SPACE CHANGES, ETC.)
	R7=RCURVE(R3)
CC      R7=0.9+(R6-R3)/25.+ABS(R4-R5)/10.
C SAME FORMULA AS FOUND IN SLURZ ROUTINE.  FUNCTION CURVE IS IN LOOP
CC      IF(R7)RB=-RB
CC DONE IN 'RCURVE'***  R7=RB
	RJ7=R7
	IF(X.GT.0)GO TO 2060
	GO TO 2060
2050	CALL HOMER
2060	ICB=0
	R11=RD
C  R11 GETS CHANGED IN 'HOMER'
C RSTCEN IS FOR CENTERING WHOLE RESTS.
	IF(JA.EQ.10)R3=R3+RSTJ2
	IF(JA.NE.9)RETURN
	IF(J5.GT.3)RETURN
	CALL NOZERO(R6)
	R3=R3+RSTJ2+2.*RSTJ2*R6
C ABOVE HELPS CENTER NUMBERS UNDER NOTES(BECAUSE R3 IS AT CENTR OF NUM)
C  IF P13≠0 ANY ITEM WILL LINE UP WITH ANY OTHER ITEM. P13 IS RESET=0
C  P13=-1 POSITIONS ITEM ABOVE OR BELOW NOTE, =-2 JUST BEYOND STEM.
C CODE 10 (NUMBERS) SPACED TO LEFT AS WELL AS CODE 9, P5=1,2,3 (FLAT,SHR
	END

	SUBROUTINE GETMS(KG)
	IMPLICIT INTEGER(A-Q,S-Z)
	REAL STFF,CENTR
	DIMENSION LST(18),DP(0/7)
	COMMON /DL/X22,SAVER,NAME,EXT,IOLD
	COMMON  /LIMIT/LIMIT,ITEM,L,I,IX,ITEMX,ILIM
	1 /STF/RSTFAC(0/7),RSTJ2 /IDEV/IDEV,CHNG 
	2  /POSI/STFF(0/7),JJ2,IPOS  /ALF/INP(72)
	3 /SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND
	5 /PTR/PWDS(350) /MKX/MK1,MK2,LESS,IGT,MK(5),MINUS
	COMMON/A2Z/LAA,LBB,LCC,LDD,LEE,LFF,LGG,LHH,LII,LJJ,LKK,LEL,LMM
	1 ,LNN,LOH,LPP,LQQ,LRR,LSS,LTT,LUU,LVV,LWW,LXX,LYY,LZZ
	2 /JCHAR/IXX,ISEMI,IBLA,IG,JED,KED,REDIT,RITEM 
	COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
	1 /XRN/RN(3000) /DPY/ST(4000),MEDIT,IGO  /DPTR/WDS(350)
	EQUIVALENCE (J3,JQ(1)),(I2,INP(2)),(I1,INP(1))
	1,(R4,RJQ(2)),(R5,RJQ(3)),(R8,RJQ(6))
	DATA PLUS/'+'/,ITMP/'TMP'/,MS/'MS'/,IZERO/'0'/,N99/'99'/

C  TO GET DISPLAY: 'G'; 'GM'  ADDS TO DPY;
	IF(KG.NE.0)GO TO 2250
2220	J2=0
	IF(I.EQ.1)GO TO 2230
	L=NAME
	X=EXT
CC	IF(I2.EQ.IBLA)GO TO 2110
	IF(I2.NE.IBLA)GO TO 1
	KG=1
	RETURN
1	J2=-1
	I2=(I2-IZERO)/536870912
C TURN ASCII INTO INTEGER.
	IF(I2.GT.9.OR.I2.LT.0)GO TO 2230
C VERT. STEPS PER INCH = 23.9 (CONSIDER STAFF SIZE FACTOR TOO)
	R2=I2
	J2=1
C  'GM'=GET MORE(BUT OLD OUTPUT NAME IS RESTORED AT 2207)
C 'Gn'=GET MORE AND PUT IT ON STAFF n AT POS. OF STAFF 0'S P8.
C ANYTHING AFTER 'G' BUT A NUMBER IS TAKEN AS 'GM'.
2230	I1=-1
	CALL NAMEXT(INP,NAME,EXT)
C  NOW TYPE 'G NAME' OR 'GM NAME'
	IF(NAME.NE.IBLA)GO TO 2250
2240	IF(K.NE.PLUS)GO TO 2245
C NOW NEXT-TO-LAST LETTER IS MOVED UP, LAST LETTER IS RESET TO 'A'
	NAME=((NAMZ+J3).AND."777777777400).OR."202
C   .AND.ETC ZEROS LAST 8 BITS, .OR."202 PUTS IN 'A'
	NAMZ=NAME
	K=0
	GO TO 2265
240	KG=4
700	FORMAT(72A1)
	RETURN
2245	CALL TYPSTR(' NAME.EXT?  ')
	READ(IDEV,700,END=240)INP
C GO PUT A1'S INTO A5, ETC.
	CALL NAMEXT(INP,NAME,EXT)
	IF(NAME.EQ.IBLA)GO TO 2270
	IF(NAME.NE.N99)GO TO 2250
C TYPE '99' TO BACK OUT OF 'SAVE'.
	NAME=L
	EXT=X
130	KG=2
	RETURN
2250	IF(I1.NE.LESS)GO TO 2260
	IDEV=5
	GO TO 2240
2260	CALL LO2UP(NAME)
	CALL LO2UP(EXT)
	K=NAME
	JA=2
	J3=256
	IF(K.NE.MINUS)GO TO 2263
	K=PLUS
	JA=-JA
	J3=-J3
2263	IF(K.EQ.PLUS)NAME=NAMZ+JA
C NAME='+' WHEN "NX" HAS BEEN TYPED. (UPS LAST LETTER OF FIVE TO NEXT)
2265	IF(LOOKX(NAME,EXT).EQ.0)GO TO 2240
C  FUNC. LOOKD IS 'FAIL' PROG. TO CHECK ON LOOKUPS
2270	JA=-1
C  -1 IS FOR 8852+3
2280	J=ITEM+1
	IF(NAME.NE.IBLA)GO TO 2290
C***	CALL GETEXT('TMP','MS ')
C****	CALL INMUS('TMP','MS',RN(I),PWDS(J),RSTFAC)
	K=ITMP
	JJ2=MS
	GO TO 2300
C***2290	CALL GETEXT(NAME,EXT)
C**** 2290	CALL INMUS(NAME,EXT,RN(I),PWDS(J),RSTFAC)
2290	K=NAME
	JJ2=EXT
2300	CALL INMUS(K,JJ2,RN(I),PWDS(J),RSTFAC)
    	IF(J2.EQ.0)GO TO 2310
	NAME=L
	EXT=X
C ABOVE GETS BACK ORIGINAL NAME WITH 'GM' AND 'Gn'
2310	RSTF=0
	NAMZ=NAME
C  SAVE THE NAME FOR NX OR '+' ROUTINE (GOES UP THE ALPHABET)
C***	CALL EXTIN(RSTFAC,128)
C***	CALL EXTIN(PWDS(J),JJ2)
C***	CALL EXTIN(RN(I),IPOS)
	ITEM=ITEM+JJ2-2
	IF(J2)2350,2320,2330
CC      IF(I2.EQ.IM)GO TO 2203
C J2=-1,1=GM *******'GET MORE' DOES NOT GET MOTIVE LIST OF NEW FILE.****
2320	IF(LCNT.GT.1)CALL EXTIN(LIST,LCNT)
	I=IPOS
	IF(RSTF.EQ.0)GO TO 1320
C  (END OF V ARRAY)RSTF=-1 MEANS READ THE DPY BUFFER
	CALL EXTIN(ST,4302)
	CALL DPYNEW
	GO TO 130

2330	DO 2340 K=1,ITEM
	IF(RN(PWDS(K)+1).NE.8)GO TO 2340
	J3=PWDS(K)
	IF(RN(J3+2).NE.0)GO TO 2340
	R8=RN(J3+8)
C ASSUMES SPACE INFO IS IN P8.  GET IT.
C NEXT FOR VERTICAL SPACING OF NEW STAFF TO BE READ.
	R5=23.9/RSTFAC(0)
	R3=.73*R2
C INCHES BETWEEN STAVES=.73
	R4=(R8-R3)*R5
C R4=CHANGE FROM NORMAL POSITION FOR INCOMING STAFF.
	GO TO 2350
2340	CONTINUE
C IF NO STAFF 0 WAS FOUND R4=0
	R4=0
2350	M=I-1
	DO 2360 K=J,J+JJ2-2
	PWDS(K)=PWDS(K)+M
	IF(J2.LE.0)GO TO 2360
C NEXT FOR GET-MORE AND PUT ON STAFF #R2
	J3=PWDS(K)
	RN(J3+2)=R2
	IF(RN(J3+1).NE.8)GO TO 2360
	RN(J3+4)=R4
C SET HEIGHT OF STAFF - DEPENDANT UPON P8 OF STAFF 0.
CCC     IF(RN(J3).GE.6)RN(J3+8)=0
C ZERO SPACING PARAM IN UPPER STAVES.
2360	CONTINUE
1320	KG=3
	END